package com.sayice.coursetable.logic.dao;

import androidx.room.Dao;
import androidx.room.Insert;
import androidx.room.Query;
import androidx.room.Transaction;

import com.sayice.coursetable.logic.model.Course;

import java.util.List;

/**
 * 课程相关数据库操作
 */
@Dao
public interface CourseDao {
    /**
     * 插入一条记录
     *
     * @return 返回自增主键的值
     */
    @Insert
    long insert(Course course);

    /**
     * 删除某课程表的课程
     *
     * @param tableId 课表编号
     */
    @Query("delete from Course where tableId = :tableId")
    void deleteByTableId(int tableId);

    /**
     * 调整自增主键的值
     */
    @Query("update sqlite_sequence set seq = (select max(id) from Course) where name = 'Course'")
    void resetId();

    /**
     * 删除某课程表的课程并调整自增主键的值
     *
     * @param tableId 课表编号
     */
    @Transaction
    default void deleteOfTable(int tableId) {
        deleteByTableId(tableId);
        resetId();
    }

    /**
     * 获取课程表的所有课程
     *
     * @param tableId 课表编号
     */
    @Query("select * from Course where tableId = :tableId")
    List<Course> loadAll(int tableId);

    /**
     * 获取课程表在一星期的某天的所有课程
     *
     * @param tableId 课表编号
     * @param dayNum  星期号（从周一开始）
     */
    @Query("select * from Course where tableId = :tableId and dayNum = :dayNum")
    List<Course> loadByDayNum(int tableId, int dayNum);
}
